调用Lua方法
CallLuaFunction.cs
    //#define TEST_GC
    using UnityEngine;
    using System.Collections;
    using LuaInterface;
    using System;
    public class CallLuaFunction : MonoBehaviour 
    {
        private string script = 
            @"  function luaFunc(num)                        
                    return num + 1
                end
                test = {}
                test.luaFunc = luaFunc
            ";
        LuaFunction func = null;
        LuaState lua = null;
        string tips = null;
        void Start () 
        {
    #if !TEST_GC
        #if UNITY_5
            Application.logMessageReceived += ShowTips;
        #else
            Application.RegisterLogCallback(ShowTips);
        #endif
    #endif
            lua = new LuaState();
            lua.Start();
            lua.DoString(script);
            //Get the function object
            func = lua.GetFunction("test.luaFunc");
            if (func != null)
            {
                //有gc alloc
                object[] r = func.Call(123456);
                Debugger.Log("generic call return: {0}", r[0]);
                // no gc alloc
                int num = CallFunc();
                Debugger.Log("expansion call return: {0}", num);
            }
            lua.CheckTop();
        }
        void ShowTips(string msg, string stackTrace, LogType type)
        {
            tips += msg;
            tips += "\r\n";
        }
    #if !TEST_GC
        void OnGUI()
        {
            GUI.Label(new Rect(Screen.width / 2 - 200, Screen.height / 2 - 150, 400, 300), tips);
        }
    #endif
        void OnDestroy()
        {
            if (func != null)
            {
                func.Dispose();
                func = null;
            }
            lua.Dispose();
            lua = null;
    #if !TEST_GC
        #if UNITY_5
            Application.logMessageReceived -= ShowTips;
        #else
            Application.RegisterLogCallback(null);
        #endif
    #endif
        }
        int CallFunc()
        {        
            func.BeginPCall();                
            func.Push(123456);
            func.PCall();        
            int num = (int)func.CheckNumber();                    
            func.EndPCall();
            return num;                
        }
        //在profiler中查看gc alloc
    #if TEST_GC
        void Update () 
        {
            func.Call(123456);
            //CallFunc();        
        }
    #endif
    }
🔚